/**
 * @description 数组
 * @author 张航
 * @date 2020-03-18 12:20:36
 * @version V1.0.0
 */

/**
 * @functionName  forEach
 * @param {Array} arr 遍历的数组
 * @param {Function} fn 执行的方法
 * @description 循环数组并执行方法
 * @author 张航
 * @date 2020-03-18 13:07:17
 * @version V1.0.0
 */
export const forEach = (arr = [], fn = function () { }) => {
  if (!arr.length || !fn) return
  let i = -1
  const len = arr.length
  while (++i < len) {
    const item = arr[i]
    fn(item, i, arr)
  }
}

/**
 * @functionName getIntersection
 * @param {Array} arr1 数组1
 * @param {Array} arr2 数组2
 * @return {Array} 返回处理后的数组
 * @description 得到两个数组的交集, 两个数组的元素为数值或字符串
 * @author 张航
 * @date 2020-03-18 13:06:01
 * @version V1.0.0
 */
export const getIntersection = (arr1 = [], arr2 = []) => {
  const len = Math.min(arr1.length, arr2.length)
  let i = -1
  const res = []
  while (++i < len) {
    const item = arr2[i]
    if (arr1.indexOf(item) > -1) res.push(item)
  }
  return res
}
/**
 * @functionName getUnion
 * @param {Array} arr1 数组1
 * @param {Array} arr2 数组2
 * @return {Array} 返回合并后的数组
 * @description 得到两个数组的并集, 两个数组的元素为数值或字符串
 * @author 张航
 * @date 2020-03-18 13:04:49
 * @version V1.0.0
 */
export const getUnion = (arr1 = [], arr2 = []) => {
  return Array.from(new Set([...arr1, ...arr2]))
}

/**
 * @functionName hasOneOf
 * @param {Array} targetarr 目标数组
 * @param {Array} arr 需要查询的数组
 * @return {Boolean} 返回查询结果
 * @description 判断要查询的数组是否至少有一个元素包含在目标数组中
 * @author 张航
 * @date 2020-03-18 13:03:54
 * @version V1.0.0
 */
export const hasOneOf = (targetarr = [], arr = []) => {
  return targetarr.some(_ => arr.indexOf(_) > -1)
}
